package com.by.service.impl;

import com.by.bean.Enterprise;
import com.by.common.crud.BaseServiceImpl;
import com.by.common.exception.BusinessException;
import com.by.mapper.EnterpriseMapper;
import com.by.service.EnterpriseService;
import org.springframework.stereotype.Service;


@Service
public class EnterpriseServiceImpl extends BaseServiceImpl<Enterprise,EnterpriseMapper>implements EnterpriseService{

    private String currentMaxCode;//当前最大编码
    @Override
    public int save(Enterprise entity) {
        //校验企业名称是否重复
        int count =baseMapper.existName(entity.getName());
        if (count>0){
            throw new BusinessException("企业名称已存在");
        }
        //企业名称校验通过 生成编码

        entity.setCode(generateNewCode());
        return super.save(entity);
    }

    /**
     * 生成新的编码
     * @return
     */
    String generateNewCode(){
        //如果编码存在
        if (null!=currentMaxCode){
            return getNextCode(currentMaxCode);
        }
        //内存在没有 去数据库查询最大编码
        currentMaxCode = baseMapper.queryMaxCode();
        if (null == currentMaxCode){
            //说明当前没有编码
            //赋初始值
            currentMaxCode = "1000001";
            return currentMaxCode;
        }
        //如果存在
        return getNextCode(currentMaxCode);
    }


    /**
     * 根据当前编码 生成下一个编码
     *
     * @param currentCode 当前编码
     * @return
     */
    String getNextCode(String currentCode){
        //如果内存中存在最大编码
        //转换编码为数字
        int tmp = Integer.parseInt(currentCode);
        tmp++;
        //记录最新的编码
        currentMaxCode = String.valueOf(tmp);
        return currentMaxCode;
    }
}